/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package webservices;

import entities.Enseigne;
import entities.Restaurant;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.ws.rs.*;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import org.primefaces.json.*;
import sessions.GestionnaireEnseigne;

/**
 *
 * @author imric
 */
@Path("enseignes")
public class EnseigneFacadeREST {

    GestionnaireEnseigne gestionnaireEnseigne = lookupGestionnaireEnseigneBean();
    private final String ID = "ID";
    private final String NOM = "NOM";
    private final String DESCR = "DESCRIPTION";
    private final String ADRESSE = "ADRESSE";
    private final String VILLE = "VILLE";
    private final String TYPE = "TYPE";

    @POST
    @Consumes({"application/json"})
    public void create(String entity) {
        try {
            // On récupère le String envoyé par l'appli Android
            // et on le transforme en JSON pour récuperer les infos
            JSONObject jo = new JSONObject(entity);
            String type = jo.getString(TYPE);
            Enseigne enseigne = new Restaurant();

            // On vérifie le type d'Enseigne à créer
            if (type != null) {
                enseigne = new Restaurant();
            }

            // On utilise les infos du JSON pour construire l'Enseigne
            enseigne.setNom(jo.getString(NOM));
            enseigne.setDescription(jo.getString(DESCR));
            enseigne.setAdresse(jo.getString(ADRESSE));
            enseigne.setVille(jo.getString(VILLE));

            // On le met en BD
            gestionnaireEnseigne.creerEnseigne(enseigne);
        } catch (Exception ex) {
           System.err.print(ex.getLocalizedMessage());
        }
    }

    @PUT
    @Consumes({"application/json"})
    public void edit(String entity) {
        try {
            // On récupère le String envoyé par l'appli Android
            // et on le transforme en JSON pour récuperer les infos
            JSONObject jo = new JSONObject(entity);
            String type = jo.getString(TYPE);
            Enseigne enseigne;
            enseigne = gestionnaireEnseigne.getEnseigne(jo.getLong(ID));
            // On vérifie le type d'Enseigne récuperer
            if (type != null) {
                if (type.equalsIgnoreCase("restaurant")) {
                    /* TODO
                     * modification sur la liste de comms de l'enseigne ou les notes
                     * 
                     */
                }
            }

            // On utilise les infos du JSON pour modifier l'enseigne
            /* TODO
                     * vérification à faire pour le nom par ex.
                     * 
                     */
            enseigne.setNom(jo.getString(NOM));
            enseigne.setAdresse(jo.getString(ADRESSE));
            enseigne.setVille(jo.getString(VILLE));
            enseigne.setDescription(jo.getString(DESCR));

            gestionnaireEnseigne.enseigneUpdate(enseigne);
        } catch (Exception ex) {
            System.err.print(ex.getLocalizedMessage());
        }
    }

    @DELETE
    @Path("{id}")
    public void remove(@PathParam("id") Long id) {
        gestionnaireEnseigne.supprimerEnseigne(find(id));
    }

    
    
    @GET
    @Path("count")
    @Produces("text/plain")
    public String countAll() {
        return String.valueOf(gestionnaireEnseigne.getCount("Utilisateur"));
    }

    @GET
    @Path("count/{type}")
    @Produces("text/plain")
    public String countType(@PathParam("type") String type) {
        return String.valueOf(gestionnaireEnseigne.getCount(type));
    }

    @GET
    @Path("{id}")
    @Produces({"application/json"})
    public Enseigne find(@PathParam("id") Long id) {
        return gestionnaireEnseigne.getEnseigne(id);
    }

    @POST
    @Path("rechercheenseigne")
    @Produces({"application/json"})
    public List<Enseigne> find(String recherche) {
        try{
            JSONObject jo = new JSONObject(recherche);
            return gestionnaireEnseigne.rechercheEnseignePag(jo.getString(NOM), jo.getString(VILLE), jo.getString(TYPE), jo.getInt("START"), jo.getInt("NB"));
        }catch(Exception e){
            return null;
        }
    }
    
    @GET
    @Produces({"application/json"})
    public List<Enseigne> findAll() {
        return gestionnaireEnseigne.getEnseignes();
    }

    private GestionnaireEnseigne lookupGestionnaireEnseigneBean() {
        try {
            Context c = new InitialContext();
            return (GestionnaireEnseigne) c.lookup("java:global/TheCityRater/TheCityRater-ejb/GestionnaireEnseigne!sessions.GestionnaireEnseigne");
        } catch (NamingException ne) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", ne);
            throw new RuntimeException(ne);
        }
    }
}
